#ifndef __AMPluginDataModel_H_DEFINED__
#define __AMPluginDataModel_H_DEFINED__

#include "IPMUnknown.h"
#include "AMPID.h"
#include "IControlView.h"
#include <iostream>
using namespace std;
class AMPIssuesDataNode;
/**  @ingroup paneltreeview
*/

class AMPluginDataModel : public IPMUnknown
{
public:
	enum { kDefaultIID = IID_IPNLTRVDATAMODEL };

	/**	Accessor for the root path
		@return PMString giving the path associated with the root node
	 */
	virtual PMString GetRootPath() const =0 ;


	virtual AMPIssuesDataNode* GetNode(const PMString& path) const = 0;

	/**	Given a path, discover the path of its parent
		@param path [IN] specifies given path
		@return Returns path as string
	 */
	virtual PMString GetParentPath(const PMString& path) const=0;

	/**	Determine the number of children given a path
		@param path [IN] specifies given path
		@return Returns number of children
	 */
	virtual int32 GetChildCount(const PMString& path)=0; 

	/**	Get the path associated with the specified child
		@param path [IN] specifies given path
		@param nth [IN] specifies which child
		@return Returns path as string
	 */
	virtual PMString GetNthChildPath(const PMString& path, int32 nth)=0; 

	/**	Determine the index in the parent's list of kids for 
		a particular child
		@param par [IN] specifies parent
		@param kid [IN] specifies kid
		@return Returns index 
	 */
	virtual int32 GetChildIndexFor(const PMString& par, const PMString& kid)=0; 

	/**	Call when you want to force a recalculation
	 */
	virtual void Rebuild(const PMString& rootPath)=0;
	
	virtual void RereshData(const PMString& rootPath)=0;
	
	virtual void deleteData(const PMString& rootPath)=0;
	
	virtual PMString GetRootName() const = 0;
	
	virtual PMString GetParentName(const PMString& path) const = 0;
	
	virtual PMString GetNthChildName(const PMString& path, int32 nth) = 0; 
	
	virtual PMString GetRootImgPath() const = 0;
	
	virtual PMString GetParentImgPath(const PMString& path) const = 0;
	
	virtual PMString GetNthChildImgPath(const PMString& path, int32 nth) = 0; 
	
	virtual int GetRootType() const = 0;
	
	virtual int GetParentType(const PMString& path) const = 0;
	
	virtual int GetNthChildType(const PMString& path, int32 nth) = 0; 
	
	virtual int GetNthChildDataChecked(const PMString& path, int32 nth) = 0;
	
	virtual int GetRootIsCheck() const = 0;
	
	virtual int GetParentIsCheck(const PMString& path) const = 0;
	
	virtual void SetCurrentSelected(const PMString& path, const int typenode) = 0;
	
	virtual int GetCurrentSelected(const PMString& path) = 0;
	
	virtual string GetIssueParentSelected(const PMString& path) = 0;
	
	virtual void GetParamNodeSelected(const PMString& parentPath, string *pageSelect, string *parentIssue) = 0;
	
	virtual void deleteTree() = 0;

	virtual IControlView* GetWidgetOnPanel(const WidgetID& panelWidgetID, const WidgetID& widgetID) = 0;
	
	virtual int GetRootNumber() const = 0;
	
	virtual int GetParentNumber(const PMString& path) const = 0;
	
	virtual int GetNthChildNumber(const PMString& path, int32 nth) = 0; 
	
	virtual int GetNodeStatus(const PMString& path) = 0; 
	
	virtual int GetNodeIsEditing(const PMString& path) = 0;
};


#endif // __AMPluginDataModel_H_DEFINED__

